Repeat the analysis in

Zhou, Y., Song, W.M., Andhey, P.S., Swain, A., Levy, T., Miller, K.R., Poliani, P.L., Cominelli, M., Grover, S., Gilfillan, S., et al. (2020). Human and mouse single-nucleus transcriptomics reveal TREM2-dependent and TREM2-independent cellular responses in Alzheimer’s disease. Nat. Med. 26, 131–142.




Load required packages.

library(tidyverse)
library(magrittr)
library(Matrix)
library(Seurat)
library(extrafont)
library(gridExtra)
# library(patchwork)
Sys.Date()
## [1] "2020-07-22"

Data preparation

Functions loading

source(
    file = file.path(
        SCRIPT_DIR,
        "utilities.R"
    )
)

Data loading

# load matrix
embedding <- read.csv(
    file = "embedding_ncomponents15_seed20200317.csv"
)
embedding %>% head()
reticulate::py_discover_config()
## python:         /Users/jialei/.pyenv/shims/python
## libpython:      /Users/jialei/.pyenv/versions/3.8.2/lib/libpython3.8.dylib
## pythonhome:     /Users/jialei/.pyenv/versions/3.8.2:/Users/jialei/.pyenv/versions/3.8.2
## version:        3.8.2 (default, May 23 2020, 03:35:41)  [Clang 11.0.3 (clang-1103.0.32.62)]
## numpy:          /Users/jialei/.pyenv/versions/3.8.2/lib/python3.8/site-packages/numpy
## numpy_version:  1.19.0
## 
## NOTE: Python version was forced by RETICULATE_PYTHON
np <- reticulate::import("numpy", convert = TRUE)
scipy.sparse <- reticulate::import(module = "scipy.sparse", convert = TRUE)

matrix_readcount_use <- scipy.sparse$load_npz("matrix_readcount.npz")
matrix_readcount_use_features <- np$load("matrix_readcount_features.npy")
matrix_readcount_use_barcodes <- np$load("matrix_readcount_barcodes.npy")
rownames(matrix_readcount_use) <- matrix_readcount_use_features
colnames(matrix_readcount_use) <- matrix_readcount_use_barcodes
matrix_readcount_use <- matrix_readcount_use[, embedding$cell]

# calculate CPM
matrix_cpm_use <- calc_cpm(matrix_readcount_use)

stopifnot(
    dim(matrix_readcount_use) == dim(matrix_cpm_use)
)
print(dim(matrix_readcount_use))
## [1] 27998 89773
print(object.size(matrix_readcount_use), units = "auto", standard = "SI")
## 3.4 GB
print(object.size(matrix_cpm_use), units = "auto", standard = "SI")
## 3.4 GB

Visualization

Clustering

embedding %>% 
    mutate(num_umis = colSums(matrix_readcount_use[, cell])) %>% 
    group_by(louvain) %>% 
    summarise(
        num_cell = n(),
        median_umis = median(num_umis)
    )
## `summarise()` ungrouping output (override with `.groups` argument)

Clusters

p_embedding_cluster <- plot_embedding(
    embedding = embedding[, c("x_tsne", "y_tsne")],
    color_values = embedding$louvain %>% as.factor(),
    label = "Cluster",
    # label_position = c(label_x, label_y),
    show_color_value_labels = TRUE,
    show_color_legend = FALSE,
    geom_point_size = 0.3,
    sort_values = FALSE
) +
    scale_color_manual(
        values = gg_color_hue(n = length(unique(embedding$louvain)))
    )
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
p_embedding_cluster

Distribution of UMIs

# Embedding
plot_embedding_value(
    embedding = embedding[, c("x_tsne", "y_tsne")],
    color_values = matrix_readcount_use[, embedding$cell] %>%
        colSums(),
    colorbar_position = c(0.88, 0.27),
    label = "UMI distribution",
    label_position = NULL,
    # label_position = c(label_x, label_y),
    geom_point_size = 0.3,
    sort_values = FALSE,
    FUN = function(x) log10(x)
)

# violin
# sort(unique(embedding$louvain))
cells_cluster_lst <- map(sort(unique(embedding$louvain)), function(x) {
    embedding %>%
        filter(louvain == x) %>%
        pull(cell)
})
names(cells_cluster_lst) <- sort(unique(embedding$louvain))


map(names(cells_cluster_lst), function(x) {
    colSums(matrix_readcount_use[, cells_cluster_lst[[x]]]) %>%
        enframe(name = "cell") %>%
        mutate(group = x)
}) %>%
    dplyr::bind_rows() %>%
    mutate(
        group = factor(
            group,
            levels = str_sort(
                names(cells_cluster_lst),
                numeric = TRUE,
                decreasing = TRUE
            )
        ),
        category = "UMI distribution"
    ) %>%
    plot_violin_umi(
        x = value,
        y = group,
        z = "category"
    )

file_name <- "Rplot_violin_UMIs.pdf"
if (file.exists(file_name)) {
    ggsave(
        filename = file_name,
        useDingbats = FALSE,
        plot = last_plot(),
        device = NULL,
        path = NULL,
        scale = 1,
        width = 55,
        height = 85,
        units = c("mm"),
    )
}

Expression

t-SNE embedding

selected_feature <- "ENSMUSG00000024621_Csf1r"
p_embedding_Csf1r <- plot_embedding_value(
    embedding = embedding[, c("x_tsne", "y_tsne")],
    color_values = matrix_cpm_use[selected_feature, embedding$cell],
    colorbar_position = c(0.88, 0.27),
    label = selected_feature,
    label_position = NULL,
    # label_position = c(label_x, label_y),
    geom_point_size = 0.3,
    sort_values = TRUE,
    FUN = NULL
)

selected_feature <- "ENSMUSG00000052336_Cx3cr1"
p_embedding_Cx3cr1 <- plot_embedding_value(
    embedding = embedding[, c("x_tsne", "y_tsne")],
    color_values = matrix_cpm_use[selected_feature, embedding$cell],
    colorbar_position = c(0.88, 0.27),
    label = selected_feature,
    label_position = NULL,
    # label_position = c(label_x, label_y),
    geom_point_size = 0.3,
    sort_values = TRUE,
    FUN = NULL
)

selected_feature <- "ENSMUSG00000036353_P2ry12"
p_embedding_P2ry12 <- plot_embedding_value(
    embedding = embedding[, c("x_tsne", "y_tsne")],
    color_values = matrix_cpm_use[selected_feature, embedding$cell],
    colorbar_position = c(0.88, 0.27),
    label = selected_feature,
    label_position = NULL,
    # label_position = c(label_x, label_y),
    geom_point_size = 0.3,
    sort_values = TRUE,
    FUN = NULL
)

selected_feature <- "ENSMUSG00000036887_C1qa"
p_embedding_C1qa <- plot_embedding_value(
    embedding = embedding[, c("x_tsne", "y_tsne")],
    color_values = matrix_cpm_use[selected_feature, embedding$cell],
    colorbar_position = c(0.88, 0.27),
    label = selected_feature,
    label_position = NULL,
    # label_position = c(label_x, label_y),
    geom_point_size = 0.3,
    sort_values = TRUE,
    FUN = NULL
)
p_embedding_combined <- grid.arrange(
    p_embedding_Csf1r,
    p_embedding_Cx3cr1,
    p_embedding_P2ry12,
    p_embedding_C1qa,
    ncol = 2
)

Lollipop

clusters_lollipop <- sort(unique(embedding$louvain))
cells_selected_lollipop <- lapply(clusters_lollipop, function(x) {
    embedding$cell[embedding$louvain == x]
})
names(cells_selected_lollipop) <- clusters_lollipop

FEATURES_LOLLIPOP <- c(
    "ENSMUSG00000026959_Grin1",
    "ENSMUSG00000035864_Syt1",
    "ENSMUSG00000025576_Rbfox3",
    "ENSMUSG00000027273_Snap25",
    "ENSMUSG00000059003_Grin2a",
    "ENSMUSG00000070570_Slc17a7",
    "ENSMUSG00000038331_Satb2",
    "ENSMUSG00000070880_Gad1",
    "ENSMUSG00000026787_Gad2",
    "ENSMUSG00000004366_Sst",
    "ENSMUSG00000029819_Npy",
    "ENSMUSG00000031425_Plp1",
    "ENSMUSG00000041607_Mbp",
    "ENSMUSG00000037625_Cldn11",
    "ENSMUSG00000076439_Mog",
    "ENSMUSG00000024617_Camk2a",
    "ENSMUSG00000032532_Cck",
    "ENSMUSG00000033161_Atp1a1",
    "ENSMUSG00000023868_Pde10a",
    "ENSMUSG00000061762_Tac1",
    "ENSMUSG00000045573_Penk",
    "ENSMUSG00000041592_Sdk2",
    "ENSMUSG00000026837_Col5a1",
    "ENSMUSG00000025582_Nptx1",
    "ENSMUSG00000059173_Pde1a",
    "ENSMUSG00000036617_Etl4",
    "ENSMUSG00000005089_Slc1a2",
    "ENSMUSG00000050953_Gja1",
    "ENSMUSG00000024411_Aqp4",
    "ENSMUSG00000021665_Hexb",
    "ENSMUSG00000024621_Csf1r",
    "ENSMUSG00000036887_C1qa",
    "ENSMUSG00000036353_P2ry12",
    "ENSMUSG00000029231_Pdgfra",
    "ENSMUSG00000021614_Vcan",
    "ENSMUSG00000032911_Cspg4",
    "ENSMUSG00000046160_Olig1",
    "ENSMUSG00000017344_Vtn",
    "ENSMUSG00000029648_Flt1",
    "ENSMUSG00000041378_Cldn5"
)

p_dotplot_features_selected <- plot_lollipop(
    cells = cells_selected_lollipop,
    features = FEATURES_LOLLIPOP,
    matrix_cpm = matrix_cpm_use
)
p_dotplot_features_selected

Violin plot

FEATURES_VIOLIN <- c(
    # "ENSMUSG00000018126_Baiap2l2",
    # "ENSMUSG00000068129_Cst7",
    # "ENSMUSG00000014599_Csf1",
    # "ENSMUSG00000015568_Lpl",
    # "ENSMUSG00000062593_Lilrb4a",
    # "ENSMUSG00000030789_Itgax",
    "ENSMUSG00000005533_Igf1r",
    # "ENSMUSG00000000982_Ccl3",
    # "ENSMUSG00000050370_Ch25h",
    "ENSMUSG00000022265_Ank",
    # "ENSMUSG00000002602_Axl",
    # "ENSMUSG00000024610_Cd74",
    "ENSMUSG00000002985_Apoe",
    # "ENSMUSG00000069516_Lyz2",
    "ENSMUSG00000029207_Apbb2",
    "ENSMUSG00000021109_Hif1a",
    # "ENSMUSG00000018927_Ccl6",
    # "ENSMUSG00000029816_Gpnmb",
    # "ENSMUSG00000025351_Cd63",
    # "ENSMUSG00000073411_H2-D1",
    "ENSMUSG00000007891_Ctsd",
    "ENSMUSG00000023992_Trem2"
    # "ENSMUSG00000052336_Cx3cr1",
    # "ENSMUSG00000033192_Lpcat2",
    # "ENSMUSG00000048163_Selplg"
    # "ENSMUSG00000036353_P2ry12",
    # "ENSMUSG00000054675_Tmem119"
    # "ENSMUSG00000079227_Ccr5",
    # "ENSMUSG00000029343_Crybb1"
)

plot_violin(
    cells = cells_selected_lollipop,
    features = FEATURES_VIOLIN,
    matrix_cpm = matrix_cpm_use,
    x_range_breaks = NULL
)

Reclustering microglia

embedding_microglia <- read_csv(
    file = "reclustering_microglia/embedding_ncomponents15_seed20200317.csv"
)
## Parsed with column specification:
## cols(
##   cell = col_character(),
##   batch = col_character(),
##   louvain = col_double(),
##   x_tsne = col_double(),
##   y_tsne = col_double(),
##   x_umap = col_double(),
##   y_umap = col_double(),
##   x_fitsne = col_double(),
##   y_fitsne = col_double(),
##   x_phate = col_double(),
##   y_phate = col_double(),
##   `x_min_dist=0.1` = col_double(),
##   `y_min_dist=0.1` = col_double(),
##   x_multicoretsne = col_double(),
##   y_multicoretsne = col_double()
## )
embedding_microglia %>%
    mutate(num_umis = colSums(matrix_readcount_use[, cell])) %>%
    group_by(louvain) %>%
    summarise(
        num_cell = n(),
        median_umis = median(num_umis)
    )
## `summarise()` ungrouping output (override with `.groups` argument)

Clusters

p_embedding_microglia_cluster <- plot_embedding(
    embedding = embedding_microglia[, c("x_tsne", "y_tsne")],
    color_values = embedding_microglia$louvain %>% as.factor(),
    label = "Cluster",
    # label_position = c(label_x, label_y),
    show_color_value_labels = TRUE,
    show_color_legend = FALSE,
    geom_point_size = 0.6,
    sort_values = FALSE
) +
    scale_color_manual(
        values = gg_color_hue(n = length(unique(embedding_microglia$louvain)))
    )
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
p_embedding_microglia_cluster

Distribution of samples

Batch

prepare_cluster_composition(
    embedding = embedding_microglia,
    x = louvain, group = batch
) %>%
    select(-num_cells) %>%
    pivot_wider(
        names_from = batch,
        values_from = percentage
    ) %>%
    replace(is.na(.), 0) %>%
    print(n = nrow(.))
## `summarise()` ungrouping output (override with `.groups` argument)
## `summarise()` regrouping output by 'louvain' (override with `.groups` argument)
## # A tibble: 9 x 13
## # Groups:   louvain [9]
##   louvain SRR10480618 SRR10480619 SRR10480622 SRR10480623 SRR10480624
##     <dbl>       <dbl>       <dbl>       <dbl>       <dbl>       <dbl>
## 1       0     0.00524     0.00131     0.00655     0.00393      0.256 
## 2       1     0.119       0.107       0.101       0.120        0.0748
## 3       2     0.131       0.0773      0.129       0.0962       0.0442
## 4       3     0.0853      0.0821      0.0853      0.0692       0.121 
## 5       4     0.129       0.0385      0.0963      0.0674       0.158 
## 6       5     0.101       0.0671      0.0793      0.0854       0.0976
## 7       6     0.102       0.0472      0.102       0.0709       0.0945
## 8       7     0.0316      0.0421      0.0632      0.0105       0.147 
## 9       8     0.195       0.0345      0.0345      0.0575       0.161 
## # … with 7 more variables: SRR10480625 <dbl>, SRR10480626 <dbl>,
## #   SRR10480627 <dbl>, SRR10480628 <dbl>, SRR10480629 <dbl>, SRR10480620 <dbl>,
## #   SRR10480621 <dbl>
prepare_cluster_composition(
    embedding = embedding_microglia,
    x = louvain, group = batch
) %>%
    arrange(louvain) %>%
    mutate(
        batch = factor(batch),
        louvain = factor(louvain)
    ) %>%
    plot_barplot(x = louvain, y = percentage, z = batch) +
    scale_fill_manual(
        values = ggthemes::tableau_color_pal("Tableau 20")(
            length(unique(embedding_microglia$batch))
        ),
        labels = str_pad(
            string = embedding_microglia$batch,
            width = nchar("Trem2_KO_5XFAD"),
            side = "right",
            pad = "\U2800"
        )
    )
## `summarise()` ungrouping output (override with `.groups` argument)
## `summarise()` regrouping output by 'louvain' (override with `.groups` argument)

Genotype

Format genotype for samples.

embedding_microglia %<>%
    mutate(sample = case_when(
        batch %in% c("SRR10480618", "SRR10480619", "SRR10480620") ~ "WT",
        batch %in% c("SRR10480621", "SRR10480622", "SRR10480623") ~ "Trem2_KO",
        batch %in% c("SRR10480624", "SRR10480625", "SRR10480626") ~ "WT_5XFAD",
        batch %in% c("SRR10480627", "SRR10480628", "SRR10480629") ~ "Trem2_KO_5XFAD"
    )) %>%
    dplyr::select(cell, batch, sample, louvain, everything())
prepare_cluster_composition(
    embedding = embedding_microglia,
    x = louvain, group = sample
) %>%
    mutate(
        sample = factor(
            sample,
            levels = (c("WT", "Trem2_KO", "WT_5XFAD", "Trem2_KO_5XFAD"))
        ),
        louvain = factor(louvain)
    ) %>%
    arrange(louvain) %>%
    plot_barplot(x = louvain, y = percentage, z = sample) +
    scale_fill_manual(
        values = ggthemes::tableau_color_pal("Tableau 10")(
            length(unique(embedding_microglia$sample))
        )
    )
## `summarise()` ungrouping output (override with `.groups` argument)
## `summarise()` regrouping output by 'louvain' (override with `.groups` argument)

Genotype, reversed

prepare_cluster_composition(
    embedding = embedding_microglia,
    x = sample, group = louvain
) %>%
    mutate(
        sample = factor(
            sample,
            levels = rev(c("WT", "Trem2_KO", "WT_5XFAD", "Trem2_KO_5XFAD"))
        )
    ) %>%
    arrange(louvain) %>%
    mutate(louvain = factor(louvain)) %>%
    plot_barplot(x = sample, y = percentage, z = louvain) +
    coord_flip() +
    scale_fill_manual(
        values = ggthemes::tableau_color_pal("Tableau 10")(
            length(unique(embedding_microglia$louvain))
        )
    )
## `summarise()` ungrouping output (override with `.groups` argument)
## `summarise()` regrouping output by 'sample' (override with `.groups` argument)

Heatmap

FEATURES_HEATMAP <- c(
    "ENSMUSG00000018126_Baiap2l2",
    "ENSMUSG00000068129_Cst7",
    "ENSMUSG00000014599_Csf1",
    "ENSMUSG00000015568_Lpl",
    "ENSMUSG00000062593_Lilrb4a",
    "ENSMUSG00000030789_Itgax",
    "ENSMUSG00000005533_Igf1r",
    "ENSMUSG00000000982_Ccl3",
    "ENSMUSG00000050370_Ch25h",
    "ENSMUSG00000022265_Ank",
    "ENSMUSG00000002602_Axl",
    "ENSMUSG00000024610_Cd74",
    "ENSMUSG00000002985_Apoe",
    "ENSMUSG00000069516_Lyz2",
    "ENSMUSG00000029207_Apbb2",
    "ENSMUSG00000021109_Hif1a",
    "ENSMUSG00000018927_Ccl6",
    "ENSMUSG00000029816_Gpnmb",
    "ENSMUSG00000025351_Cd63",
    "ENSMUSG00000073411_H2-D1",
    "ENSMUSG00000007891_Ctsd",
    "ENSMUSG00000023992_Trem2",
    "ENSMUSG00000052336_Cx3cr1",
    "ENSMUSG00000033192_Lpcat2",
    "ENSMUSG00000048163_Selplg",
    "ENSMUSG00000036353_P2ry12",
    "ENSMUSG00000054675_Tmem119",
    "ENSMUSG00000079227_Ccr5",
    "ENSMUSG00000029343_Crybb1"
)


matrix_heatmap <- sapply(sort(unique(embedding_microglia$batch)), function(x) {
    cells_in_group <- embedding_microglia %>%
        filter(batch == x) %>%
        pull(cell)

    rowMeans(matrix_cpm_use[FEATURES_HEATMAP, cells_in_group])
})
matrix_heatmap <- log10(matrix_heatmap + 1)
matrix_heatmap <- t(scale(t(matrix_heatmap)))
rownames(matrix_heatmap) <- str_remove(
    string = rownames(matrix_heatmap),
    pattern = "^E.+_"
)
ComplexHeatmap::Heatmap(
    matrix = matrix_heatmap,
    col = wesanderson::wes_palette("Zissou1", 100, type = "continuous"),
    rect_gp = grid::gpar(col = "white", lwd = 0.1),
    cluster_columns = FALSE,
    row_names_gp = grid::gpar(fontfamily = "Arial", fontsize = 6),
    column_names_gp = grid::gpar(fontfamily = "Arial", fontsize = 6),
    heatmap_legend_param = list(
        title = "Z score",
        title_gp = grid::gpar(
            fontfamily = "Arial",
            fontsize = 6
        ),
        legend_direction = "vertical",
        labels_gp = grid::gpar(
            fontfamily = "Arial",
            fontsize = 5
        ),
        legend_height = unit(25, "mm"),
        legend_width = unit(10, "mm")
    )
    # heatmap_width = unit(8, "cm")
    # heatmap_height = unit(8, "cm")
)

R session info

sessioninfo::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value                       
##  version  R version 4.0.2 (2020-06-22)
##  os       macOS Catalina 10.15.6      
##  system   x86_64, darwin19.5.0        
##  ui       unknown                     
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  ctype    en_US.UTF-8                 
##  tz       America/Chicago             
##  date     2020-07-23                  
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package        * version     date       lib
##  abind            1.4-5       2016-07-21 [1]
##  ape              5.4         2020-06-03 [1]
##  assertthat       0.2.1       2019-03-21 [1]
##  backports        1.1.8       2020-06-17 [1]
##  blob             1.2.1       2020-01-20 [1]
##  broom            0.7.0.9001  2020-07-14 [1]
##  cellranger       1.1.0       2016-07-27 [1]
##  circlize         0.4.10      2020-06-15 [1]
##  cli              2.0.2       2020-02-28 [1]
##  clue             0.3-57      2019-02-25 [1]
##  cluster          2.1.0       2019-06-19 [2]
##  codetools        0.2-16      2018-12-24 [2]
##  colorspace       1.4-1       2019-03-18 [1]
##  ComplexHeatmap   2.4.2       2020-05-04 [1]
##  cowplot          1.0.0       2019-07-11 [1]
##  crayon           1.3.4       2017-09-16 [1]
##  data.table       1.12.9      2020-07-04 [1]
##  DBI              1.1.0       2019-12-15 [1]
##  dbplyr           1.4.4       2020-05-27 [1]
##  deldir           0.1-28      2020-07-15 [1]
##  digest           0.6.25      2020-02-23 [1]
##  dplyr          * 1.0.1       2020-07-21 [1]
##  ellipsis         0.3.1.9000  2020-07-18 [1]
##  evaluate         0.14        2019-05-28 [1]
##  extrafont      * 0.17        2014-12-08 [1]
##  extrafontdb      1.0         2012-06-11 [1]
##  fansi            0.4.1       2020-01-08 [1]
##  farver           2.0.3       2020-01-16 [1]
##  fastmap          1.0.1       2019-10-08 [1]
##  fitdistrplus     1.1-1       2020-05-19 [1]
##  forcats        * 0.5.0.9000  2020-05-28 [1]
##  fs               1.4.1.9000  2020-07-18 [1]
##  future           1.18.0      2020-07-09 [1]
##  future.apply     1.6.0       2020-07-01 [1]
##  generics         0.0.2       2018-11-29 [1]
##  GetoptLong       1.0.2       2020-07-06 [1]
##  ggplot2        * 3.3.2.9000  2020-07-13 [1]
##  ggrepel          0.9.0       2020-04-25 [1]
##  ggridges         0.5.2       2020-01-12 [1]
##  ggthemes         4.2.0       2019-05-13 [1]
##  GlobalOptions    0.1.2       2020-06-10 [1]
##  globals          0.12.5      2019-12-07 [1]
##  glue             1.4.1.9000  2020-07-07 [1]
##  goftest          1.2-2       2019-12-02 [1]
##  gridExtra      * 2.3         2017-09-09 [1]
##  gtable           0.3.0       2019-03-25 [1]
##  haven            2.3.1       2020-06-01 [1]
##  hms              0.5.3       2020-01-08 [1]
##  htmltools        0.5.0       2020-06-16 [1]
##  htmlwidgets      1.5.1       2019-10-08 [1]
##  httpuv           1.5.4       2020-06-06 [1]
##  httr             1.4.2       2020-07-20 [1]
##  ica              1.0-2       2018-05-24 [1]
##  igraph           1.2.5       2020-03-19 [1]
##  irlba            2.3.3       2019-02-05 [1]
##  jsonlite         1.7.0       2020-06-25 [1]
##  KernSmooth       2.23-17     2020-04-26 [2]
##  knitr            1.29        2020-06-23 [1]
##  labeling         0.3         2014-08-23 [1]
##  later            1.1.0.1     2020-06-05 [1]
##  lattice          0.20-41     2020-04-02 [2]
##  lazyeval         0.2.2       2019-03-15 [1]
##  leiden           0.3.3       2020-02-04 [1]
##  lifecycle        0.2.0       2020-03-06 [1]
##  listenv          0.8.0       2019-12-05 [1]
##  lmtest           0.9-37      2019-04-30 [1]
##  lubridate        1.7.9       2020-07-11 [1]
##  magrittr       * 1.5.0.9000  2020-07-13 [1]
##  MASS             7.3-51.6    2020-04-26 [2]
##  Matrix         * 1.2-18      2019-11-27 [1]
##  mgcv             1.8-31      2019-11-09 [2]
##  mime             0.9         2020-02-04 [1]
##  miniUI           0.1.1.1     2018-05-18 [1]
##  modelr           0.1.8.9000  2020-05-19 [1]
##  munsell          0.5.0       2018-06-12 [1]
##  nlme             3.1-148     2020-05-24 [2]
##  patchwork        1.0.1.9000  2020-06-22 [1]
##  pbapply          1.4-2       2019-08-31 [1]
##  pillar           1.4.6.9000  2020-07-21 [1]
##  pkgconfig        2.0.3       2019-09-22 [1]
##  plotly           4.9.2.1     2020-04-04 [1]
##  plyr             1.8.6       2020-03-03 [1]
##  png              0.1-7       2013-12-03 [1]
##  polyclip         1.10-0      2019-03-14 [1]
##  promises         1.1.1       2020-06-09 [1]
##  purrr          * 0.3.4.9000  2020-06-27 [1]
##  R6               2.4.1.9000  2020-07-18 [1]
##  RANN             2.6.1       2019-01-08 [1]
##  RColorBrewer     1.1-2       2014-12-07 [1]
##  Rcpp             1.0.5       2020-07-06 [1]
##  RcppAnnoy        0.0.16      2020-03-08 [1]
##  readr          * 1.3.1.9000  2020-07-16 [1]
##  readxl           1.3.1.9000  2020-05-28 [1]
##  reprex           0.3.0       2019-05-16 [1]
##  reshape2         1.4.4       2020-04-09 [1]
##  reticulate       1.16        2020-05-27 [1]
##  rjson            0.2.20      2018-06-08 [1]
##  rlang          * 0.4.7.9000  2020-07-16 [1]
##  rmarkdown        2.3.2       2020-07-05 [1]
##  ROCR             1.0-11      2020-05-02 [1]
##  rpart            4.1-15      2019-04-12 [2]
##  rstudioapi       0.11.0-9000 2020-07-15 [1]
##  rsvd             1.0.3       2020-02-17 [1]
##  Rtsne            0.16        2020-07-03 [1]
##  Rttf2pt1         1.3.8       2020-01-10 [1]
##  rvest            0.3.5       2019-11-08 [1]
##  scales           1.1.1.9000  2020-07-18 [1]
##  sctransform      0.2.1       2019-12-17 [1]
##  sessioninfo      1.1.1.9000  2020-07-18 [1]
##  Seurat         * 3.2.0       2020-07-15 [1]
##  shape            1.4.4       2018-02-07 [1]
##  shiny            1.5.0.9001  2020-07-17 [1]
##  spatstat         1.64-1      2020-05-12 [1]
##  spatstat.data    1.4-3       2020-01-26 [1]
##  spatstat.utils   1.17-0      2020-02-07 [1]
##  stringi          1.4.6       2020-02-17 [1]
##  stringr        * 1.4.0.9000  2020-06-01 [1]
##  styler         * 1.3.2.9000  2020-07-13 [1]
##  survival         3.2-3       2020-06-13 [2]
##  tensor           1.5         2012-05-05 [1]
##  tibble         * 3.0.3.9000  2020-07-21 [1]
##  tidyr          * 1.1.0.9000  2020-07-11 [1]
##  tidyselect       1.1.0.9000  2020-07-11 [1]
##  tidyverse      * 1.3.0.9000  2020-06-01 [1]
##  utf8             1.1.4       2018-05-24 [1]
##  uwot             0.1.8.9000  2020-07-19 [1]
##  vctrs            0.3.2.9000  2020-07-21 [1]
##  viridisLite      0.3.0       2018-02-01 [1]
##  wesanderson      0.3.6.9000  2020-06-05 [1]
##  withr            2.2.0       2020-04-20 [1]
##  xfun             0.15        2020-06-21 [1]
##  xml2             1.3.2       2020-04-23 [1]
##  xtable           1.8-4       2019-04-21 [1]
##  yaml             2.2.1       2020-02-01 [1]
##  zoo              1.8-8       2020-05-02 [1]
##  source                               
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.1)                       
##  CRAN (R 4.0.0)                       
##  Github (tidymodels/broom@7db1139)    
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.1)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Bioconductor                         
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  local                                
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/dplyr@9b63b17)     
##  Github (r-lib/ellipsis@57a5071)      
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/forcats@ab81d1b)   
##  Github (r-lib/fs@ea026b0)            
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  Github (tidyverse/ggplot2@a3019f9)   
##  Github (slowkow/ggrepel@3941cf1)     
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/glue@205f18b)      
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.1)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  Github (tidyverse/lubridate@de2ee09) 
##  Github (tidyverse/magrittr@6ca227a)  
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/modelr@16168e0)    
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  Github (thomasp85/patchwork@82a5e03) 
##  CRAN (R 4.0.0)                       
##  Github (r-lib/pillar@8aef8f2)        
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/purrr@a855322)     
##  Github (r-lib/R6@1415d11)            
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/readr@2ab51b2)     
##  Github (tidyverse/readxl@3815961)    
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (r-lib/rlang@376c9c8)         
##  Github (rstudio/rmarkdown@ff1b279)   
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  Github (rstudio/rstudioapi@ed5dd25)  
##  CRAN (R 4.0.0)                       
##  Github (jkrijthe/Rtsne@14b195f)      
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  Github (r-lib/scales@350b0dc)        
##  CRAN (R 4.0.0)                       
##  Github (r-lib/sessioninfo@791705b)   
##  Github (satijalab/seurat@f5dc4ed)    
##  CRAN (R 4.0.0)                       
##  Github (rstudio/shiny@abc6a98)       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/stringr@f70c4ba)   
##  Github (r-lib/styler@babfd0d)        
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  Github (tidyverse/tibble@b4eec19)    
##  Github (tidyverse/tidyr@9c4f908)     
##  Github (tidyverse/tidyselect@69fdc96)
##  Github (hadley/tidyverse@8a0bb99)    
##  CRAN (R 4.0.0)                       
##  Github (jlmelville/uwot@13a198f)     
##  Github (r-lib/vctrs@bcfd66f)         
##  CRAN (R 4.0.0)                       
##  Github (karthik/wesanderson@d90700a) 
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.1)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
## 
## [1] /usr/local/lib/R/4.0/site-library
## [2] /usr/local/Cellar/r/4.0.2_1/lib/R/library